package org.example.netty.test.nio.netty.chat.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import org.example.netty.test.nio.netty.chat.bean.*;
import org.example.netty.test.nio.netty.chat.common.MessageType;
import org.example.netty.test.nio.netty.chat.protocol.CustomSerialize;

import java.nio.charset.StandardCharsets;

/**
 * @author zp
 * @version 1.0
 * @description: JSON解析的异常
 * @date 2023/4/2 17:06
 */
@Slf4j
public class JSONSerializeUtils implements CustomSerialize {
    /**
     * @description:  序列化方法
     * @author zp
     * @date: 2023/3/31 19:24
     * @param obj
     * @return byte[]
     */
    @Override
    public byte[] serialize(Object obj) {
        return JSONObject.toJSONString(obj, SerializerFeature.WriteMapNullValue).getBytes(StandardCharsets.UTF_8);
    }

    /**
     * @param bytes
     * @description: 反序列化方法
     * @author zp
     * @date: 2023/3/31 19:20
     */
    /**
     * @Description: 重载反序列化对象
     * @param byteArray
     * @return
     * @return Object
     * @throws
     * @author JornTang
     * @date 2017年7月22日
     */
    @Override
    public <T> T deserialize(byte[] byteArray, Class<T> requiredType) {
        String jsonStr = new String(byteArray, CharsetUtil.UTF_8);
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        return JSONObject.toJavaObject(jsonObject, requiredType);
    }
}
